package me.yushuai.wukong.base.service;

import me.yushuai.wukong.base.api.dto.CreateZoneDTO;
import me.yushuai.wukong.base.api.dto.PagingSearchZone;
import me.yushuai.wukong.base.api.dto.UpdateZoneDTO;
import me.yushuai.wukong.base.api.dto.ZoneDTO;
import me.yushuai.wukong.common.dto.PageDTO;
import me.yushuai.wukong.common.exceptin.BizIdNotExistException;
import me.yushuai.wukong.common.exceptin.DuplicateBizIdException;
import me.yushuai.wukong.common.exceptin.NotExistException;
import me.yushuai.wukong.common.service.BaseService;

/**
 * 库区业务接口
 *
 * @author zhoushuai@189.cn
 * @since 2022-08-25
 */
public interface ZoneService extends BaseService {

    /**
     * 新建一条库区信息
     *
     * @param dto 库区信息
     * @return 返回库区信息编号
     * @throws DuplicateBizIdException 当业务Id已存在时抛出异常
     * @throws NotExistException       当库区编号不存在时抛出异常
     */
    Long createZone(CreateZoneDTO dto) throws DuplicateBizIdException, NotExistException;


    /**
     * 修改库区信息
     *
     * @param dto 库区信息
     * @throws NotExistException 当库区不存在时抛出异常
     */
    Long updateZone(UpdateZoneDTO dto) throws NotExistException;

    /**
     * 删除一条库区信息
     *
     * @param zoneId 库区编号
     * @throws NotExistException 当库区编码不存在时抛出异常
     */
    void deleteZone(Long zoneId) throws NotExistException;

    /**
     * 通过ID查询库区的详细信息
     *
     * @param zoneId 库区编号
     * @return 返回库区的详细信息
     * @throws NotExistException 当库区不存在时抛出异常
     */
    ZoneDTO findZoneById(Long zoneId) throws NotExistException;

    /**
     * 通过库区编码查询库区详细信息
     *
     * @param bizId 业务Id
     * @return 返回库区详细信息
     * @throws BizIdNotExistException 当库区编码不存在时抛出异常
     */
    ZoneDTO findZoneByBizId(String bizId) throws BizIdNotExistException;

    /**
     * 分页条件检索库区信息
     *
     * @param pagingSearchZone 分页检索条件
     * @return 分页返回查询结果
     */
    PageDTO<ZoneDTO> pagingSearch(PagingSearchZone pagingSearchZone);

    /**
     * 检查Id是否存在
     *
     * @param zoneId Zone的id
     * @return 返回true表示存在否则不存在
     */
    boolean existsById(Long zoneId);

    /**
     * 检查业务Id是否存在
     *
     * @param bizId Zone的业务Id
     * @return 返回true表示业务Id存在否则表示不存在
     */
    boolean existsByBizId(String bizId);

}
